Micron Document
NexusPi Git Node

Node / mirrors / MeshChatX / files / tests / backend / test_safe_path_under_dir.py

Displaying Raw • Download

tests/backend/test_safe_path_under_dir.py 786bddfe0aebae27a59e4e8aa7a87ae9a1163c12 (786bddfe) Text, 2.04 KB

T8b949e# SPDX-License-Identifier: 0BSD

Tff7b72import T7ee787os
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3patch

Tff7b72import T7ee787pytest

Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787path_utils Tff7b72import Tb4b4b4(
Te6edf3atomic_write_bytesTb4b4b4,
Te6edf3atomic_write_textTb4b4b4,
Te6edf3safe_path_under_dirTb4b4b4,
Tb4b4b4)


Tff7b72def Td2a8fftest_safe_path_under_dir_accepts_basenameTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3target Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffrec.opusTa5d6ff"
Te6edf3targetTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4)
Te6edf3out Tff7b72= Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffrec.opusTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3out Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Tffa657strTb4b4b4(Te6edf3targetTb4b4b4)Tb4b4b4)


Tff7b72def Td2a8fftest_safe_path_under_dir_collapses_traversal_to_basenameTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3out Tff7b72= Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff../evil.opusTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3out Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffevil.opusTa5d6ff"Tb4b4b4)Tb4b4b4)


Tff7b72def Td2a8fftest_safe_path_under_dir_rejects_nul_and_dotTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffaTffea00\x00Ta5d6ffb.opusTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff..Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None


Tff7b72def Td2a8fftest_safe_path_under_dir_rejects_symlink_escapeTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
T8b949e"""Reject basename symlinks whose real path leaves the jail."""
Te6edf3outside Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffoutside.secretTa5d6ff"
Te6edf3outsideTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ffsecretTa5d6ff"Tb4b4b4)
Te6edf3jail Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffjailTa5d6ff"
Te6edf3jailTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3link Tff7b72= Te6edf3jail Tff7b72/ Ta5d6ff"Ta5d6ffescape.opusTa5d6ff"
Te6edf3linkTff7b72.Td2a8ffsymlink_toTb4b4b4(Te6edf3outsideTb4b4b4)
Tff7b72assert Te6edf3safe_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3jailTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffescape.opusTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None


Tff7b72def Td2a8fftest_atomic_write_bytes_keeps_destination_if_tmp_write_failsTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffmeta.jsonTa5d6ff"
Te6edf3destTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ffOLDTa5d6ff"Tb4b4b4)
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffos.fdopenTa5d6ff"Tb4b4b4, Te6edf3side_effectTff7b72=Tf85149OSErrorTb4b4b4(Ta5d6ff"Ta5d6ffdisk fullTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149OSErrorTb4b4b4, Te6edf3matchTff7b72=Ta5d6ff"Ta5d6ffdisk fullTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3atomic_write_bytesTb4b4b4(Tffa657strTb4b4b4(Te6edf3destTb4b4b4)Tb4b4b4, Ta5d6ffbTa5d6ff"Ta5d6ffNEWTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3destTff7b72.Td2a8ffread_bytesTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ffbTa5d6ff"Ta5d6ffOLDTa5d6ff"


Tff7b72def Td2a8fftest_atomic_write_text_replaces_destinationTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffmeta.jsonTa5d6ff"
Te6edf3destTff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ffOLDTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3atomic_write_textTb4b4b4(Tffa657strTb4b4b4(Te6edf3destTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffNEWTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3destTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffNEWTa5d6ff"


Tff7b72def Td2a8fftest_atomic_write_text_accepts_pathTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffmeta.jsonTa5d6ff"
Te6edf3atomic_write_textTb4b4b4(Te6edf3destTb4b4b4, Ta5d6ff"Ta5d6ffvia-pathTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3destTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffvia-pathTa5d6ff"

Served by rngit 1.5.3 - Generated in 0.03s